La Logica di "O" e "E"
Due pilastri sostengono l'intero campo della combinatoria. Il loro utilizzo dipende interamente dal fatto che consideriamo un compito come una scelta singola tra diverse categorie o come una sequenza di scelte.
Se un insieme $X$ è suddiviso in sottoinsiemi disgiunti $X_1, X_2, \dots, X_n$, allora il numero totale di elementi $|X|$ è la somma delle dimensioni di quei sottoinsiemi:
$$|X| = |X_1| + |X_2| + \dots + |X_n|$$
Analogia: Scegliere un pasto al Kay’s Quick Lunch scegliendo un panino dal menù dei Piatti Principali O un antipasto dal menù degli Antipasti. Non puoi avere entrambi; scegli un solo piatto.
Se un'attività consiste in $t$ passaggi successivi, dove il passaggio $i$ ha $n_i$ esiti possibili, il numero totale di modi per completare il compito è il prodotto delle possibilità a ciascun passaggio:
$$N = n_1 \times n_2 \times \dots \times n_t$$
Analogia: Configurare un camion "Big Pickup". Devi scegliere un motore (5 opzioni) E uno stile di cabina (3 opzioni). Il numero totale di configurazioni è pari a $5 \times 3 = 15$.
Implementazione in Codice e Complessità
In informatica, questi principi si manifestano nelle strutture di ciclo. Cicli sequenziali rappresentano il Principio dell'Addizione, mentre cicli annidati rappresentano il Principio della Moltiplicazione.
per i da 1 a m: stampa(i)
per j da 1 a n: stampa(j)
// Principio della Moltiplicazione (esecuzioni: m * n)
per i da 1 a m:
per j da 1 a n:
stampa(i, j)